<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>继承模式</title>
  </head>
  <body>
    <script>
      /**
       * 3.组合继承：构造函数+原型链继承 (常用)
       *   步骤1：利用原型链实现对父类型对象的方法继承
       *   步骤2：利用super()借用父类型构建函数初始化相同属性
       * */
      function Parent(name, age) {
        this.name = name;
        this.age = age;
      }
      //向原型添加方法
      Parent.prototype.setName = function (name) {
        this.name = name;
      };

      function Child(name, age, price) {
        Parent.call(this, name, age); ///为了得到父类型的属性
        this.price = price;
      }
      //子类型的原型为父类型的一个实例对象
      Child.prototype = new Parent(); //为了能看到父类型的方法
      //让子类型的原型的constructor指向子类型
      Child.prototype.constructor = Child; //修正constructor属性

      //向子类型原型添加方法
      Child.prototype.setPrice = function (price) {
        this.price = price;
      };

      var child = new Child("Tom2", 24, 15000);
      child.setName("Bob");
      child.setPrice("16000");
      console.log(child.name, child.age, child.price);
    </script>
  </body>
</html>
